package com.atwy.iterator;

import java.util.Iterator;
import java.util.List;

public class NestedIterator implements Iterator<Integer> {
    // 保存数据地址，用于后序操作
    private List<NestedInteger> dataList;
    // 内置迭代器，为了解决当前  dataList里嵌套的list
    private NestedIterator iterator;
    // 游标，用于遍历dataList
    private int cursor;
    // 登记dataList的大小
    private int size;

    public NestedIterator(List<NestedInteger> nestedList) {
        // 拿到数据地址
        this.dataList = nestedList;
        this.size = nestedList.size();
        this.iterator = null;
        this.cursor = -1;
    }

    @Override
    public boolean hasNext() {
        // 1.当内置的迭代器不为空，则直接利用迭代器性质
        if(iterator != null && iterator.hasNext()){
            return true;
        }
        // 2.内置迭代器为空，则去遍历原始的list，也就是最外层的list
        while (++cursor < size){
            // 如果是数字
            if(dataList.get(cursor).isInteger()){
                iterator = null;
                return true;
            }
            // 如果不是数字，则利用迭代器的性质
            iterator = new NestedIterator(dataList.get(cursor).getList());
            if(iterator.hasNext()){
                return true;
            }
        }
        return false;
    }

    @Override
    public Integer next() {
        // 内置迭代器为空，说明当前结点不是列表，直接返回数据即可
        if(iterator == null){
            return dataList.get(cursor).getInteger();
        }
        return iterator.next();
    }
}
